package com.example.pushdeom.Bean;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;

import androidx.annotation.Nullable;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.pushdeom.R;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class VolleyUtil {
   private Context context;

//    StringRequest的构造函数需要传入三个参数，第一个参数就是目标服务器的URL地址，第二个参数是服务器响应成功的回调，第三个参数是服务器响应失败的回调。

    public void StringRequest(){
        StringRequest stringRequest = new StringRequest("http://www.baidu.com",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("TAG", response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
            }
        });
    }

//    JsonObjectRequest和JsonArrayRequest，从名字上你应该能就看出它们的区别了吧？一个是用于请求一段JSON数据的，一个是用于请求一段JSON数组的。

    public void JsonObjectRequest(){
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.baidu.com",
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("TAG", response.toString());
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
            }
        });
    }
    //请求方法、请求地址、JSONArray、服务器响应成功的回调、服务器响应失败的回调、getParams携带参数
    public void JsonArrayRequest(){
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,"",null,new Response.Listener<JSONArray>(){
            @Override
            public void onResponse(JSONArray response) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        })
        {
            @Nullable
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> map = new HashMap<>();
                map.put("","");
                return map;
            }
        };
    }

/*    第一个参数就是图片的URL地址。
    第二个参数是图片请求成功的回调，这里我们把返回的Bitmap参数设置到ImageView中。
    第三第四个参数分别用于指定允许图片最大的宽度和高度，如果指定的网络图片的宽度或高度大于这里的最大值，则会对图片进行压缩，指定成0的话就表示不管图片有多大，都不会进行压缩。
    第五个参数用于指定图片的颜色属性，Bitmap.Config下的几个常量都可以在这里使用，其中ARGB_8888可以展示最好的颜色属性，每个图片像素占据4个字节的大小，而RGB_565则表示每个图片像素占据2个字节大小。
    第六个参数是图片请求失败的回调，这里我们当请求失败时在ImageView中显示一张默认图片。*/
    public void ImageRequest(){
        ImageRequest imageRequest = new ImageRequest("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdp.gtimg.cn%2Fdiscuzpic%2F0%2Fdiscuz_x5_gamebbs_qq_com_forum_201306_19_1256219xc797y90heepdbh.jpg%2F0&refer=http%3A%2F%2Fdp.gtimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625387390&t=fa8124c7ed2ff97ad54bdde5b4238c3f", new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                //成功了
//                imgUser.setImageBitmap(response);
            }
        },100,100, Bitmap.Config.RGB_565, new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error) {
                //失败后
//                imgUser.setImageResource(R.mipmap.ic_launcher);
            }
        });
    }


/*   ImageLoader也可以用于加载网络上的图片，并且它的内部也是使用ImageRequest来实现的，不过ImageLoader明显要比ImageRequest更加高效，
    因为它不仅可以帮我们对图片进行缓存，还可以过滤掉重复的链接，避免重复发送请求。
    由于ImageLoader已经不是继承自Request的了，所以它的用法也和我们之前学到的内容有所不同，总结起来大致可以分为以下四步：
    */
    public void ImageLoader(){
        //创建一个RequestQueue对象。
        RequestQueue requestQueue = Volley.newRequestQueue(context);
        //创建一个ImageLoader对象。
        ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
            @Nullable
            @Override
            public Bitmap getBitmap(String url) {
                return null;
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {

            }
        });
        //获取一个ImageListener对象。
//        ImageLoader.ImageListener listener = ImageLoader.getImageListener(img1,
//                R.drawable.dengdai, R.drawable.img_failure);
        //调用ImageLoader的get()方法加载网络上的图片。
//        imageLoader.get("https://pic2.zhimg.com/v2-dc85758af4e7d698a0abd76d2e8f19b3_r.jpg?source=1940ef5c", listener, 150, 150);
    }
}
